﻿
// SrvrItem.cpp: CPocketServSrvrItem 类的实现
//

#include "pch.h"
#include "framework.h"
#include "PocketServ.h"

#include "PocketServDoc.h"
#include "SrvrItem.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CPocketServSrvrItem 实现

IMPLEMENT_DYNAMIC(CPocketServSrvrItem, COleServerItem)

CPocketServSrvrItem::CPocketServSrvrItem(CPocketServDoc* pContainerDoc)
	: COleServerItem(pContainerDoc, TRUE)
{
	// TODO: 在此添加一次性构造代码
	//  (如将附加剪贴板格式添加到项的数据源中)
}

CPocketServSrvrItem::~CPocketServSrvrItem()
{
	// TODO: 在此处添加清理代码
}

void CPocketServSrvrItem::Serialize(CArchive& ar)
{
	// 如果将该项复制到剪贴板中，则框架将调用 CPocketServSrvrItem::Serialize。
	//  这可以
	//  通过 OLE 回调 OnGetClipboardData 来自动执行。
	//  对于嵌入项，默认最好直接委托给文档的 Serialize 函数。
	//  如果支持链接，则只需序列化
	//  文档的一部分。

	if (!IsLinkedItem())
	{
		CPocketServDoc* pDoc = GetDocument();
		ASSERT_VALID(pDoc);
		if (pDoc)
			pDoc->Serialize(ar);
	}
}

BOOL CPocketServSrvrItem::OnGetExtent(DVASPECT dwDrawAspect, CSize& rSize)
{
	// 大多数与此类似的应用程序只处理绘制内容
	//  项目的方面。如果希望支持其他方面，如
	//  DVASPECT_THUMBNAIL (通过重写 OnDrawEx)，则此
	//  应修改 OnGetExtent 的实现以处理
	//  其他方面。

	if (dwDrawAspect != DVASPECT_CONTENT)
		return COleServerItem::OnGetExtent(dwDrawAspect, rSize);

	// 调用 CPocketServSrvrItem::OnGetExtent 以便获取整个项的
	//  HIMETRIC 单元表示的范围。  此处的默认实现
	//  只返回单元的硬编码数字。

	// TODO: 替换此任意大小

	rSize = CSize(3000, 3000);   // 3000 x 3000 HIMETRIC 单元

	return TRUE;
}

BOOL CPocketServSrvrItem::OnDraw(CDC* pDC, CSize& rSize)
{
    if (!pDC)
        return FALSE;

    // 如果使用 rSize，则将此移除
    UNREFERENCED_PARAMETER(rSize);

    // TODO: 设置映射模式和范围
    //  (此范围通常与从 OnGetExtent 返回的大小相同)
    pDC->SetMapMode(MM_ANISOTROPIC);
    pDC->SetWindowOrg(0, 0);
    pDC->SetWindowExt(3000, 3000);

    // TODO:  在此处添加绘制代码。  也可以填充 HIMETRIC 范围。
    //  所有绘制都将在图元文件设备上下文(pDC)中进行。

    CPocketServDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);


    CBrush brush;
    brush.CreateSolidBrush(RGB(0, 255, 0));
    CBrush* pBrush = pDC->SelectObject(&brush);

    CFont font;
    font.CreateFont(-500, 0, 0, 0, 400, FALSE, FALSE, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS,
        CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, L"Arial");
    CFont* pFont = pDC->SelectObject(&font);
    CRect rectEllipse(CRect(750, 750, 2250, 2250));
    pDC->Ellipse(rectEllipse);

    int nLength;
    PCHAR pCh;
    USES_CONVERSION;
    pCh = T2A(pDoc->m_strText);

    nLength = strlen(pCh);
    TextOutA(pDC->m_hDC, 0, 0, pCh, nLength);
    pDC->SelectObject(pFont);
    pDC->SelectObject(pBrush);

    return TRUE;
}


// CPocketServSrvrItem 诊断

#ifdef _DEBUG
void CPocketServSrvrItem::AssertValid() const
{
	COleServerItem::AssertValid();
}

void CPocketServSrvrItem::Dump(CDumpContext& dc) const
{
	COleServerItem::Dump(dc);
}
#endif

